<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>对象</title>
  <script>
    // 1.利用字面量创建对象
    var obj = {
      uname: '张三',
      age: 18,
      sex: '男',
      sayHi: function () {
        console.log('Hi~')
      },
    }
    //调用对象第一种方法  对象名.属性名
    console.log(obj.uname)
    // 调用对象第二种方法  对象名['属性名']
    console.log(obj['age'])
    //调用对象的方法sayHi  对象名.方法名()   千万别忘记添加小括号
    obj.sayHi()

    // 2.利用 new Object() 创建对象
    var obj1 = new Object()
    obj1.uname = '张三'
    obj1.age = 18
    obj1.sex = '男'
    obj1.sayHi = function () {
      console.log('Hi~')
    }
    console.log(obj1.uname)
    console.log(obj1['age'])
    obj1.sayHi()

    // 3. 利用构造函数创建对象
    function Star (uname, age, sex) {     //构造函数名首字母要大
      this.name = uname
      this.age = age
      this.sex = sex
    }

    // 原型
    Star.prototype.say = function () {
      console.log('111')
    }
    var ldh = new Star('刘德华', 18, '男')    //调用构造函数必须使用new
    console.log(ldh.name)
    console.log(ldh.age)
    var zxy = new Star('张学友', 19, '男')
    console.log(zxy.name)
    console.log(zxy['sex'])
    // ldh.say()
    // zxy.say()
    // hasOwnProperty() 方法会返回一个布尔值，指示对象自身属性中是否具有指定的属性（也就是，是否有指定的键）。
    console.log(ldh.hasOwnProperty('name'))  // true
    console.log(ldh.hasOwnProperty('say'))  // false
    console.log(ldh.hasOwnProperty('hasOwnProperty'))  // false   在原型里
  </script>
</head>

<body>

</body>

</html>